# 前言
这一篇也是比较独立,因为在常规前端中,我们发布出去的内容都是以静态资源的形式存在,如果是走 Nginx,天然的高并发服务器并不需要我们去做太多的事情,而丢到 oss 这种文件存贮之后,也不用再关心性能的问题,最多在挂个 cdn 即可,这种事情在大部分的小公司可能还需要自己来做,但是在稍具规模的大公司,一般也会有运维来操作。
如果是使用 nodejs 的话,一般也会走 docker + 云服务器,云服务器一般自带就有服务器的监控,所以这篇的内容针对于两个方面,一个是内部的服务器,会上一些小型的 node 服务,这种服务启动速度比较快,也不需要使用 Rancher 这种集群服务。另一个是打包机上的一些监控,例如缓存超过磁盘使用率预警之类的。
# 普通的 node 服务
# pm2-web
如果是一些小型的 node 项目,例如 express 或者 koa 就能解决的问题,在发布的时候,想必大部分的同学都是使用过 pm2 这个工具。但是不知道有没有同学使用过 pm2-web 这个针对于 pm2 服务状态的监控程序。
安装跟运行都非常简单,运行下述两个命令即可。
npm install -g pm2-web
pm2-web #运行(默认占用8080端口)
运行完毕之后,会出现如下的界面,会收集当前一起动的 pm2 的服务信息,也可以对搜集的 pm2 的服务做 stop、restart、reload 等操作。这样的话,可以不用去服务器看这些内容。

同时,可以再 web 端能看到当前服务所使用的 CPU、内存以及日志,默认五天内的 cpu 以及内存数据都能获得,能很好地监控到整个 node 服务的一些情况,不过也不需要调整太多,监控服务本身就是在消耗一定的资源换取内容。
虽然很好用,不过还是比较老旧的项目了,已经不维护了。我们的服务使用的是 Egg,所以接下来推荐另外一个。
# Easy-Monitor
全新的企业级 Node.js 应用性能监控与线上故障定位解决方案,整个监控项目是基于 Egg来写的,是个人(阿里大佬,人很热心)维护,之前我们公司也在使用,整个的文档写的非常详细,点击查看。

在装完本身的监控系统之后,它并不能跟 pm2-web 一样自动收集,需要主动在项目代码中注入,类似于 sentry。 一样,生成 key 跟 token 在自己的系统中配置。对于 Egg 项目提供了方便的插件使用,其他的 node 项目也能接入不过稍微麻烦点。
之所以推荐,是因为他自带了一个告警内容,这一块的话,可以自定义配置,如果触碰到了告警规则,可以主动发送消息,有钉钉以及自定义的 webhook 推送。
整个监控的架构设计如下,想了解更多的同学,建议上手尝试一波。

# Sentry
第三个还是 Sentry,在合理的使用下,还是可以帮我们解决不少的问题,比如我们在 node 项目中,关键的接口或者业务逻辑中,采用自定义上报的模式,如果出现问题,可以及时的通知到我们。
# 打包机
在打包机上,我们关注的更多的是服整个服务器的内存、cpu 等等的内容。所以首先我们要熟悉一些 linux 的常用命令。
例如在内存快满的时候使用 sudo rm -rf/* 这样的命令可以快速释放存储空间。
上面那句话别信,也不要尝试,这是删除服务器所有内容,用完你这份工作也差不多到头了。
# top - 经典的 Linux 任务管理工具
使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
- d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
- p: 通过指定监控进程 ID 来仅仅监控某个进程的状态。
- q: 该选项将使 top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
- S:指定累计模式。
- s:使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
- i:使 top 不显示任何闲置或者僵死进程。
- c: 显示整个命令行而不只是显示命令名。
运行完毕之后可以看到如下的监控内容:

类似于 windows 或者 mac 的活动监视器,可以看到哪些服务异常。
其他的一些监控大都也都是服务器命令,大同小异,并没有找到非常合适的,如果有同学有更好的推荐,可以跟我说下,我也缺。
# 内存命令
# 磁盘大小命令 df
执行 df -hl 如下图所示,可以得到挂载磁盘的一些具体情况。

下述是命令
